home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Tools / Languages / MacMETH 3.2.1 / Sources / MacC3.3 / M2DA.MOD < prev    next >
Encoding:
Modula Implementation  |  1992-05-29  |  1.1 KB  |  42 lines  |  [TEXT/MEDT]

  1. IMPLEMENTATION MODULE M2DA;  (* NW 20.5.84; WH 19.8.86; HS 21.3.91 *)
  2.  
  3.   FROM SYSTEM   IMPORT ADDRESS, VAL;
  4.   FROM System   IMPORT Allocate, Deallocate;
  5.   FROM Terminal IMPORT WriteString;
  6.  
  7.   CONST MinHeapSize =  30000D;
  8.         MaxHeapSize = 250000D;
  9.         StepSize    =  10000D;
  10.  
  11.   VAR current, last: ADDRESS; trySize: LONGINT;
  12.  
  13.   PROCEDURE ALLOCATE(VAR a: ADDRESS; n: INTEGER);
  14.   BEGIN
  15.     a := current; IF ODD(n) THEN INC(n) END;
  16.     current := current + VAL(ADDRESS, LONG(n));
  17.     IF current >= last THEN WriteString(" not enough heap space"); HALT END
  18.   END ALLOCATE;
  19.  
  20.   PROCEDURE Available(): INTEGER;
  21.   BEGIN
  22.     RETURN SHORT(last - current)
  23.   END Available;
  24.  
  25.   PROCEDURE ResetHeap(a: ADDRESS);
  26.   BEGIN
  27.     current := a
  28.   END ResetHeap;
  29.  
  30. BEGIN
  31.   trySize := MaxHeapSize;
  32.   LOOP
  33.     Allocate(current, trySize);
  34.     IF current # NIL THEN EXIT END;
  35.     DEC(trySize, StepSize);
  36.     IF trySize < MinHeapSize THEN WriteString(" not enough heap space"); HALT END;
  37.   END;
  38.   Deallocate(current); DEC(trySize, StepSize);
  39.   Allocate(current, trySize);
  40.   last := VAL(LONGINT, current) + trySize;
  41. END M2DA. (* Copyright Departement Informatik, ETH Zuerich, Switzerland, 1992 *)
  42.